/*
 * Menu.java
 * Copyright(C) 2020-2099 坚小持
 * All rights reserved.
 * -----------------------------------------------
 * 2020-08-13 Created
 */
package com.project.web.system.model.app;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;

import java.util.Date;
import java.util.List;

/**
 * 菜单表
 *
 * @version 1.0 2020-08-13
 */
@ApiModel("菜单表")
@Data
public class Menu {

    /**
     *
     */
    @ApiModelProperty()
    private Long id;

    /**
     * 父级ID
     */
    @ApiModelProperty("父级ID")
    private Long parentId;

    /**
     * 名称
     */
    @ApiModelProperty("名称")
    private String name;

    /**
     * 权限编码
     */
    @ApiModelProperty("权限编码")
    private String code;

    /**
     * 图标
     */
    @ApiModelProperty("图标")
    private String icon;

    /**
     * 路由URI
     */
    @ApiModelProperty("路由URl")
    private String routeUrl;

    /**
     * 排序
     */
    @ApiModelProperty("排序")
    private Integer sort;

    /**
     * 菜单级别
     */
    @ApiModelProperty("菜单级别")
    private Integer grade;

    /**
     * 菜单类型 1：菜单 2：页面
     */
    @ApiModelProperty("菜单类型\n" +
            "            1：菜单\n" +
            "            2：页面")
    private Integer menuType;
    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private Date createDate;
    /**
     * 修改时间
     */
    @ApiModelProperty("修改时间")
    private Date modifyDate;
    /**
     * 子节点
     */
    @ApiModelProperty("子节点")
    private List<Menu> children;

    @ApiModelProperty("contentPath")
    private String contentPath;


    /****************扩展字段*****************/


    private Long userId;

    /**
     * 菜单类型 1 菜单 2 按钮
     */
    public enum MENU_TYPE {
        MENU("菜单", 1),
        BUTTON("按钮", 2);

        /**
         * 枚举名称
         */
        private String name;

        /**
         * 枚举值
         */
        private Integer value;

        /**
         * 枚举有参构造函数
         *
         * @param value 枚举值
         * @param name  枚举名
         */
        MENU_TYPE(String name, Integer value) {
            this.value = value;
            this.name = name;
        }


        public String getName() {
            return name;
        }

        /**
         * 设置枚举名称
         */
        public void setName(String name) {
            this.name = name;
        }

        /**
         * 获取类型值
         */
        public Integer getValue() {
            return value;
        }

        /**
         * 设置类型值
         */
        public void setValue(Integer value) {
            this.value = value;
        }
    }

}